import 'dart:async';

import 'package:firstflutterapp/basic_widget.dart';
import 'package:firstflutterapp/container_widget.dart';
import 'package:firstflutterapp/life_cycle_state_ful_widget.dart';
import 'package:firstflutterapp/main_route.dart';
import 'package:flutter/material.dart';

import 'hello_flutter.dart';

/*
与C/C++、Java类似，Flutter 应用中main函数为应用程序的入口。main函数中调用了runApp 方法，它的功能是启动Flutter应用。
runApp它接受一个Widget参数，在本示例中它是一个MyApp对象，MyApp()是Flutter应用的根组件。
main函数使用了(=>)符号，这是Dart中单行函数或方法的简写。
   */
//void main() => runApp(MyApp());

void collectLog(String line) {
  //收集日志
}

void reportErrorAndLog(FlutterErrorDetails details) {
  //上报错误和日志逻辑
}

FlutterErrorDetails makeDetails(Object obj, StackTrace stack) {
  // 构建错误信息
}

void main() {
  FlutterError.onError = (FlutterErrorDetails details) {
    reportErrorAndLog(details);
  };
  runZoned(
    () => runApp(MyApp()),
    zoneSpecification: ZoneSpecification(
      print: (Zone self, ZoneDelegate parent, Zone zone, String line) {
        collectLog(line); // 收集日志
      },
    ),
    onError: (Object obj, StackTrace stack) {
      var details = makeDetails(obj, stack);
      reportErrorAndLog(details);
    },
  );
}

/**
 * Widget类 @immutable 注解，类中不能存在可变的成员变量
 */
class MyApp extends StatelessWidget {
  //Flutter在构建页面时，会调用组件的build方法，widget的主要工作是提供一个build()方法来描述如何构建UI界面（通常是通过组合、拼装其它基础widget）
  @override
  Widget build(BuildContext context) {
    //MaterialApp 是Material库中提供的Flutter APP框架，通过它可以设置应用的名称、主题、语言、首页及路由列表等。MaterialApp也是一个widget
    return MaterialApp(
      //应用名称
      title: 'Flutter Demo',
      theme: ThemeData(
        //蓝色主题
        primarySwatch: Colors.blue,
      ),
      //应用首页路由,home 为Flutter应用的首页，它也是一个widget
//      home: MyHomePage(title: 'Flutter Demo Home Page'),
      //使用命名路由的方式启动
      initialRoute: "/",
      //注册的路由表
      routes: {
        "/": (context) => MyHomePage(
              title: 'Flutter Demo Home Page (routes register)',
            ),
        "new_route": (context) => NewRoute(),
        "new_router_arg": (context) => TipRoute1(),
        "hello_flutter": (context) => HelloFlutter(),
        "life_cycle_flutter": (context) => LifeCycleWidget(),
        "basic_widget": (context) => BasicWidget(),
        "container_widget": (context) => ContainerWidget(),
      },
      //路由拦截
      //注意，onGenerateRoute只会对命名路由生效
//    onGenerateRoute:(RouteSettings settings){
//    return MaterialPageRoute(builder: (context){
//    String routeName = settings.name;
//    // 如果访问的路由页需要登录，但当前未登录，则直接返回登录页路由，
//    // 引导用户登录；其它情况则正常打开路由。
//    }
//    );
    );
  }
}


